/*
05-树8 File Transfer
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Set ======================================*/
// 集合元素类型
#ifndef SetElementType
#define SetElementType int
#endif

typedef int SetName; // 集合名称 = 根节点下标
// 定义并查集
// 若元素值 < 0, 表示该节点为根节点，元素值的绝对值为集合元素个数
// 若元素值 > 0, 为该元素的父节点下标。
typedef SetElementType *SetType;

SetType createSet(int capacity) {
    SetType set = calloc(capacity, sizeof(SetElementType));
    memset(set, -1, sizeof(SetElementType)*capacity);
    return set;
}

void freeSet(SetType set) {
    free(set);
}

SetName find(SetType s, SetElementType x) {
    // 路径压缩
    if (s[x] < 0) {
        return x;
    } else {
        // 先找到根
        // 把根设为x的父节点
        // 再返回根
        return s[x] = find(s, s[x]);
    }

}

void unionSet(SetType s, SetName root1, SetName root2) {
    // 按树的规模归并，比较没错，根节点元素值小于0，集合元素的个数是负值
    if (s[root2] < s[root1]) {
        // root2 节点多, root1挂在root2上，在root2上加上root1的节点
        s[root2] += s[root1]; 
        s[root1] = root2;
    } else {
        // root1 节点多, root2挂在root1上
        s[root1] += s[root2]; 
        s[root2] = root1;
    }
}

/* current ===================================*/
#define MaxSize 10001

void inputConnection(SetType s) {
    // 我这里没有做数映射，浪费了s[0]，减少了-1运算
    SetElementType c1, c2;
    scanf("%d %d\n", &c1, &c2);
    SetName root1 = find(s, c1);
    SetName root2 = find(s, c2);
    if (root1 != root2) {
        unionSet(s, root1, root2);
    }
}

void checkConnection(SetType s) {
    SetElementType c1, c2;
    scanf("%d %d\n", &c1, &c2);
    SetName root1 = find(s, c1);
    SetName root2 = find(s, c2);
    if (root1 == root2) {
        printf("yes\n");
    } else {
        printf("no\n");
    }
}

void checkNetwork(SetType s, int n) {
    int counter = 0;
    for (int i=1; i<=n; i++) {
        if (s[i] < 0) {
            counter++;
        }
    }
    if (counter == 1) {
        printf("The network is connected.\n");
    } else {
        printf("There are %d components.\n", counter);
    }
}

int main() {
    // 初始化集合
    SetType s = createSet(MaxSize);
    int n;
    scanf("%d\n", &n);
    for (;;) {
        char action; // 动作
        scanf("%c", &action);
        if (action == 'I') {
            inputConnection(s);
        } else if (action == 'C') {
            checkConnection(s);
        } else if (action == 'S') {
            break;
        }
    }
    checkNetwork(s, n);
    freeSet(s);
    return 0;
}
